package main

import (
	"fmt" //fmt 占位符
	"strings"
)

func main() {

	c1 := 3.14159
	fmt.Printf("%T, %v\n", c1, c1) //float64, 3.14159   %T表示输出类型  %v表示输出值

	//var n1 float32 = 1.02
	//n1 = c1;  go是静态类型语言  无法强转

	//字符串
	path := "\"D:\\Datas\\Go\\src\\gitee.com\\conghucai\\studygo\\day02\\dataType\"" //  \转义
	fmt.Println(path)

	str := `
		asdaads
	asdasda
			sdasd
	asdas

	.
	`
	fmt.Println(str) //  ``之间的字符串保持原格式  原样输出
	path2 := `"D:\Datas\Go\src\gitee.com\conghucai\studygo\day02\dataType"`
	fmt.Println(path2 + "..." + "123") //+拼接字符串   也可以用fmt.Sprintf("%s%s", a1, a2)
	ss1 := fmt.Sprintf("%s + %s", "a1", "a2")
	fmt.Println(ss1)

	ret := strings.Split(path, "\\") //字符串切分strings.Split  得到一个Strings数组
	fmt.Println((ret))

	fmt.Println(strings.Contains(path, "gitee")) //判断匹配strings.Contains
	fmt.Println(strings.Contains(path, "Gitee"))
	fmt.Println(strings.HasPrefix(path, `"D:\D`)) //判断前缀strings.HasPrefix
	fmt.Println(strings.HasSuffix(path, `ype"`))  //判断后缀strings.HasPrefix

	fmt.Println(strings.Join(ret, "+")) //字符串数组  拼接strings.Join

	//byte类型 和 rune类型
	//字符串遍历
	s1 := "hello你好"
	for i := 0; i < len(s1); i++ {
		fmt.Printf("%v(%c)", s1[i], s1[i]) //直接遍历 使用byte接收  非ASCII会乱码
	}
	fmt.Println()

	for _, r := range s1 { //使用的是rune类型  实际上是一个int32	可以遍历unicode
		fmt.Printf("%v(%c)", r, r)
	}
	fmt.Println()

	/*
		字符串底层是一个byte数组，所以可以和[]byte类型相互转换。
		字符串是不能修改的！
		rune类型用来表示utf8字符，一个rune字符由一个或多个byte组成。
	*/
	//字符串修改：将字符串转成数组，在修改数组里面的内容  再转回字符串
	s2 := "柠檬酸了"
	s3 := []rune(s2)
	fmt.Printf("%T\n", s3) //[]int32  将字符串强转为切片
	s3[0] = '哈'
	fmt.Println(string(s3)) //切片强转为字符串

	//类型转换  go中只有强制类型转换  没有隐形转换  基本语法: T(表达式)
	var f float64 = 3.99
	var n int = int(f)
	fmt.Printf("%v, %T\n", n, n) //3, int

}
